from flask import current_app, json
from flask.json import jsonify
from modules import redis_store, constants
from modules.constants import HOME_PAGE_MAX_HOUSES
from modules.home import my_blue
from modules.models import Area, House
from modules.utils.response_code import RET


@my_blue.route('/areas')
def get_areas():
    """
    功能：获取城区信息
    请求路径：/api/v1.0/areas
    请求方式：GET
    请求参数：无
    实现思路：
        - 1.尝试从redis中取城区信息
        - 2.redis中没有则直接从mysql中查询所有的城区
        - 3.返回响应及数据
    :return:
    """
    # 1.尝试从redis中取城区信息
    try:
        areas = redis_store.get('areas_info')
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='获取城区失败')
    if not areas:
        # 2.redis中没有则直接从mysql中查询所有的城区,再存储到redis中
        try:
            areas = Area.query.all()
        except Exception as e:
            current_app.logger.error(e)
            return jsonify(errno=RET.DBERR, errmsg='获取城区失败')
        if not areas:
            return jsonify(errno=RET.NODATA, errmsg='城区信息不存在')
        # 将城区信息存储到redis中
        areas_list = []
        for area in areas:
            areas_list.append(area.to_dict())
        areas_redis = json.dumps(areas_list)
        redis_store.setex('areas_info', constants.AREA_INFO_REDIS_EXPIRES, areas_redis)

        return jsonify(errno=RET.OK, errmsg='获取城区信息成功', data=areas_list)
    data = eval(areas)
    # 3.返回响应及数据
    return jsonify(errno=RET.OK, errmsg='获取城区信息成功', data=data)


@my_blue.route('/houses/index')
def get_index_image():
    """
    功能：获取首页图片
    请求路径：/api/v1.0/houses/index
    请求参数：无
    实现思路：
        - 1.从redis中获取房屋信息
        - 2.redis中没有就从mysql中查询数据，并保存到redis中
        - 3.返回响应，携带数据
    :return:响应及数据
    """
    # 1.从redis中获取房屋信息
    try:
        houses = redis_store.get('house_info')
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='获取房屋失败')
    if not houses:
        # 2.redis中没有就从mysql中查询数据，并保存到redis中
        try:
            houses = House.query.order_by(House.order_count.desc()).limit(HOME_PAGE_MAX_HOUSES).all()
        except Exception as e:
            current_app.logger.error(e)
            return jsonify(errno=RET.DBERR, errmsg='获取房屋失败')
        if not houses:
            return jsonify(errno=RET.NODATA, errmsg='房屋信息不存在')

        houses_list = []
        for house in houses:
            houses_list.append(house.to_basic_dict())
        houses_redis = json.dumps(houses_list)
        redis_store.setex('house_info', constants.HOME_PAGE_DATA_REDIS_EXPIRES, houses_redis)

        return jsonify(errno=RET.OK, errmsg='获取房屋成功', data=houses_list)

    # 3.返回响应，携带数据
    data = eval(houses)
    return jsonify(errno=RET.OK, errmsg='获取房屋成功', data=data)
